第一章:4 策略模組化


Posted by nightqwq on 2021-12-07

在加密貨幣市場當中,不同的幣種有不同的價格和市場波動,所以也可以針對個別幣種來做策略,於是自然而然會累積許多策略。

然而每當要拿以前做過的策略出來用時,要重打程式碼是一件很煩人的事,於是接下來,我們要試著將策略進行打包,這樣以後不管是要拿出來用,還是要上傳到 Google cloud 自動運行都會變得很方便。

a. 什麼是 Decorator

Decorator 也叫裝飾器,它能夠在不更改程式碼的狀況下為程序附加特殊功能,而這些特殊功能 finlab_crypto 也早已幫我們寫好,現在就讓我們見識加上 finlab_crypto 自家的 Decorator 對我們的程序有怎樣的影響。


b. 策略裝入函式

在上次製作策略圖表那行程式碼複製圖片上反白位置,在新儲存格中貼上,並寫上:

def sma_strategy(ohlcv):

讓其餘程式碼往前四格,使整個策略變成一個函式:

之後在函式最下方 return 出場點和進場點,寫完後可以自行 run 看看,與上一章相同,會獲得時間序列:


c. 策略打包

接下來就是重頭戲了,我們在函式上方從 finlab_crypto 的裡面導入 Strategy:

from finlab_crypto import Strategy

再下一行寫入:

@Strategy()

上一行有小老鼠的程式碼就是 finlab_crypto 自家的 Decorator。

於是,我們的雙均線策略就會多出許多功能,宛如穿上強化裝備一般,比如與上一章的 vectorbt 相似,輸入:

portfolio = sma_strategy.backtest(ohlcv, freq='4h', plot=True)

效果如下:

我們成功製作了一個可移動的可視化回測圖表,圖中的藍色箭頭往上升,代表該區間斷獲利,往下則是虧損。

第二張圖表表示確切的買入賣出時間段,第三章則是累積報酬率:

我們也可以將雙均線加入回測圖表裡,來看看策略是否真的在黃金交叉時買入,死亡交叉時賣出,只要利用 Python 的高級資料結構「字典」就可以辦到。

我們在函式里最後一行的 return 上方寫一個字典,把變數取叫「figures」,我們希望均線能夠跟著價格跑,所以在字典裡寫上「'overlaps'」這個變數再做一個字典,並把雙均線寫進裡面,鍵對應到值:

 figures = {'overlaps': {'sma20': sma20,'sma60': sma60}}

把 figure 加入 return 裡面作為返回值的第三個參數,再重新運行即可看到雙均線:

可以看到,策略確實有在黃金交叉、死亡交叉的時候進行買入和賣出,也就是箭頭的開頭總是會在雙均線交叉附近(箭頭開始買入,箭頭末尾賣出)。

最後,我們將程式最下方把那行叫出視覺化圖表的程式碼存進 portfolio 這個變數裡面,以利後續跟 vectorbt 結合,激盪出更多強力的效果。

portfolio = sma_strategy.backtest(ohlcv, freq='4h', plot=True)

今天先到這邊。

下一節,我們來試著找出策略的最佳參數。


#加密貨幣 #Python







Related Posts

【THM Walkthrough】Lateral Movement and Pivoting (2)

【THM Walkthrough】Lateral Movement and Pivoting (2)

Go init() function

Go init() function

Angular17 部屬完成,在瀏覽器中使用 F5 重新整理跳轉 404 異常解決

Angular17 部屬完成,在瀏覽器中使用 F5 重新整理跳轉 404 異常解決


Comments